/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package comandos.Sel;
import entidades.Cidade;
import entidades.Voo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import erros.ErroPersistencia;
import java.util.ArrayList;
/**
 * Classe que representa os comandos de consulta na tabela voo do banco de
 * dados.
 * @author thiagostuckert
 */
public class CmdSelVoo extends CmdSel {
    /**
     * Monta o comando Sql para consultar os voos dadas as cidades de origem
     * e destino e uma data de partida.
     *
     * @param cidadeOrigem Cidade de origem do voo a ser consultado.
     * @param cidadeDestino Cidade de destino do voo a ser consultado.
     * @param data Data de partida do voo a ser consultado.
     */
    public CmdSelVoo(final Cidade cidadeOrigem, final Cidade cidadeDestino,
            final String data) {
        comandoSQL = "SELECT v.numeroVoo, v.dataPartida, v.dataChegada,"
                 + " v.horarioPartida, v.horarioChegada, v.vagas "
                + "FROM voo v, voo_has_aeroporto h,"
      + " voo_has_aeroporto h2, aeroporto a, aeroporto a2 WHERE "
      + " (v.numeroVoo = h.numeroVoo and a.codigoAeroporto = h.codigoAeroporto "
      + " and h.isPartida = true and a.nomeCidade = '"
                + cidadeOrigem.getNomeCidade() + "'and "
      + " a2.nomeCidade = '" + cidadeDestino.getNomeCidade()
                + "' and h2.isPartida = false "
      + " and h2.codigoAeroporto = a2.codigoAeroporto "
      + " and h2.numeroVoo = v.numeroVoo"
      + " and v.dataPartida = '" + data + "');";
    }

    /**
     * Monta o comando Sql para consultar o Voo dado o seu
     * número de voo.
     * @param voo Voo a ser coletado do banco de dados dado o
     * número do voo.
     */
    public CmdSelVoo(final Voo voo) {
        comandoSQL = "SELECT * FROM VOO WHERE numeroVoo = '"
                + voo.getNumeroVoo() + "';";
    }


   /***
    * Executa o comando no banco de dados.
    * @param conexao conexao com o banco de dados.
    * @throws erros.ErroPersistencia erro lançado caso a
    * execução não obtenha sucesso.
    */
    @Override
    public final Object executar(final Connection conexao)
            throws ErroPersistencia {
        try {
            Statement st = conexao.createStatement();
            ResultSet rs = st.executeQuery(comandoSQL);
            ArrayList<Voo> lista = new ArrayList();

            while(rs.next()){
                String horarioPartida = rs.getString("horarioPartida");
                if(horarioPartida.length() == 7) {
                    horarioPartida = "0" + horarioPartida;
                }
                String horarioChegada = rs.getString("horarioChegada");
                if(horarioChegada.length() == 7) {
                    horarioChegada = "0" + horarioChegada;
                }
                lista.add(new Voo(rs.getString("numeroVoo"),
                        rs.getString("dataPartida"),
                        rs.getString("dataChegada"),
                        horarioPartida,
                        horarioChegada,
                        Integer.parseInt(rs.getString("vagas"))
                        ));
                }
            return lista;
        } catch (SQLException e){
            throw new ErroPersistencia("Erro na execucao do comando SQL");
        }
    }
}
